/*
 * @Date: 2021-09-12 19:21:05
 * @Author: Acckno1
 * @LastEditTime: 2021-09-12 19:22:18
 * @Description: 
 */
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N = 10010;

int k;
int nums[N]; // 状态转移数组
int bak[N];  // 备份数据

int main() {
    cin >> k;
    int MAX = 0;
    
    for (int i = 1; i <= k; i ++) {
        cin >> nums[i];
        bak[i] = nums[i];
    }
    
    for (int i = 1; i <= k; i ++ ) {
        nums[i] = max(max(0, nums[i]), nums[i - 1] + nums[i]);
        MAX = max(MAX, nums[i]);
    }
    
    cout << MAX << " ";
    
    // 最大值为0时，表示整个数组只存在非正数。
    if (MAX == 0) {
        int i;
        for (i = 1; i <= k; i ++ ) {
            if (bak[i] == 0) break; 
        }
        // 如果数组中存在0，l和r 都是0；
        // 如果数组中不存在0，l和r 分别是第一个数和最后一个数
        if (i <= k) cout << 0 << " " << 0 << endl;
        else cout << bak[1] << " " << bak[k] << endl;
        return 0;
    }
    
    int l, r;
    for (int i = 1; i <= k; i ++) {
        if (nums[i] == MAX) {
            int idx = i;
            r = bak[idx];
            while (idx >= 1 && (nums[idx] > 0 || (nums[idx] == 0 && bak[idx] == 0))) {
                idx --;
            }
            l = bak[++ idx];
            cout << l << " " << r << endl;
            break;
        }
    }

    return 0;
}